home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
AMIGA
/
(A)P
/
(A)P1.ADF
/
Cycloids
/
save.c
< prev
Wrap
C/C++ Source or Header
|
1987-05-25
|
5KB
|
156 lines
/* save.c -- open a window to get filename,
close it, and proceed.... */
#define PLX2 240 /* Save Window Size */
#define PLY2 100
#define CN_GAD2 3
#define OK_GAD2 4
extern char filename[32];
/* define ok and cancel gadgets */
struct IntuiText oktxt2 = {3,2,JAM2,8,2,NL,(UBYTE *)" OK ",NL};
struct IntuiText cntxt2 = {3,2,JAM2,0,2,NL,(UBYTE *)"Cancel",NL};
struct Gadget cn_gad2 = {
NL, 170,65, 54,11, GADGHCOMP, RELVERIFY,
BOOLGADGET, NL, NL,
&cntxt2, NL,NL, CN_GAD2, NL };
struct Gadget ok_gad2 = {
&cn_gad2, 170,50, 54,11, GADGHCOMP, RELVERIFY,
BOOLGADGET, NL, NL,
&oktxt2, NL,NL, OK_GAD2, NL };
/* define filename gadget */
#define ESTRINGSIZE 32
UBYTE UndoBuffer[ESTRINGSIZE];
USHORT StrVectors[] = {
-1,-1,
150,-1,
150, 12,
-1, 12,
-1, -1,
};
struct Border StrBorder3 = {
-1, -1, /* initial offsets, gadget relative */
1, 0, JAM1, /* pens (fore, back) and drawmode */
5, /* number of vectors */
StrVectors, /* pointer to the actual array of vectors */
NULL /* no next Border, can point to another border */
};
/* default text */
UBYTE EnglBuffer[ESTRINGSIZE] = "temp.pic";
struct StringInfo EnglInfo = {
EnglBuffer, /* pointer to I/O buffer */
UndoBuffer, /* pointer to undo buffer */
0, /* buffer position */
ESTRINGSIZE, /* max number of chars, including NULL */
0, 0, /* first char in display, undo positions */
9, /* number of chars (currently) in the buffer */
0, 0, 0, /* position variables calculated by Intuition */
NULL, /* no pointer to RastPort */
0, /* not a LongInt string gadget */
NULL /* no pointer to alternate keymap */
};
struct IntuiText EnglText = {
2, 2, /* FrontPen, BackPen */
JAM1, /* DrawMode */
0, -11, /* LeftEdge, TopEdge (relative to gadget) */
&TestFont, /* pointer to TextFont */
(UBYTE *) "Filename: ", /* pointer to Text */
NL /* no pointer to NextText */
};
#define ENG_GAD 5
struct Gadget EnglStrGadget = {
&ok_gad2, /* pointer to Next Gadget */
10, 50, 140, 11, /* (Left Top Width Height) Hit Box */
GADGHCOMP, /* Flags */
RELVERIFY, /* Activation flags */
STRGADGET, /* Type */
(APTR)&StrBorder3, /* pointer to Border Image */
NL, /* no pointer to SelectRender */
&EnglText, /* pointer to GadgetText */
NL, /* no MutualExclude */
(APTR)&EnglInfo, /* pointer to SpecialInfo */
ENG_GAD, /* ID */
NL /* no pointer to special data */
};
/* Used to open a Window */
struct NewWindow NewSwin = {
10,10, PLX2,PLY2, 2,BCOL, NL, /* IDCMP set up AFTER CALL */
ACTIVATE | SMART_REFRESH,
&EnglStrGadget,NL, NL, /* FirstGadget, CheckMark, Title */
NL,NL, /* MUST SET SCREEN AFTER OPENSCREEN!!! */
PLX2,PLY2,PLX2,PLY2, CUSTOMSCREEN }; /* MinW, MinH, MaxW, MaxH */
/********************************************************************
* save(window)
* This is the meat. This routine opens the save window and
* retains control until the user selects the OK or CANCEL gadget.
* The calling arguement is a window pointer. That window
* is expected to have opened an IDCMP port, which save uses.
********************************************************************/
int save(calling_window)
struct Window *calling_window;
{
struct Window *cW; /* save window handle */
FAST struct IntuiMessage *imsg;
FAST struct Gadget *igad;
FAST int class;
int munge;
BOOL keepon;
/* Get screen from calling window */
NewSwin.Screen = calling_window->WScreen; /* NEED TO SET SCREEN!!! */
if ( ! (cW = (struct Window *)OpenWindow(&NewSwin)) ) {
return(FALSE); /* Oops... */
}
cW->UserPort = calling_window->UserPort;
ModifyIDCMP(cW, GADGETUP | GADGETDOWN);
keepon=TRUE;
while (keepon == TRUE) {
while (imsg=(struct IntuiMessage *)GetMsg(cW->UserPort)) {
class = imsg->Class;
ReplyMsg(imsg);
switch ( class ) {
case GADGETUP:
case GADGETDOWN:
igad =(struct Gadget *) imsg->IAddress;
switch ( igad->GadgetID ) {
case CN_GAD2:
munge=0;
keepon=FALSE;
break;
case OK_GAD2:
strcpy(filename,EnglBuffer);
munge=1;
keepon=FALSE;
break;
case ENG_GAD:
strcpy(filename,EnglBuffer);
break;
}
}
}
}
cW->UserPort = NL;
CloseWindow(cW);
if (munge==1)
return(1);
else
return(0);
}